home *** CD-ROM | disk | FTP | other *** search
- ; *** Fire And Ice CD32 HD loader v1.0
- ; *** Written by Jean-François Fabre
-
- include "syslibs.i"
- include "jst.i"
-
- HD_PARAMS "",0,0
-
- loader:
- RELOC_MOVEL D0,trainer
-
- move.l #$100000,D0
- JSRABS AllocExtMem
- RELOC_MOVEL D0,ExtBase
- beq MemErr
-
- Mac_printf "Fire And Ice CD32 HD Loader v1.0"
- Mac_printf "Coded by Jean-François Fabre © 2000"
-
- RELOC_TSTL trainer
- beq .skip
-
- NEWLINE
- Mac_printf "Trainer activated"
- .skip
- JSRGEN CheckAGA
- tst.l D0
- bne AgaErr
-
- JSRGEN GetUserFlags
- btst #AFB_NTSC,D0
- beq.b .pal
- lea progname_ntsc(pc),A0
- bra.b .cont
- .pal
- lea progname(pc),A0
- .cont
-
- RELOC_MOVEL A0,prog
-
- move.l A0,D0
- JSRABS TestFile
- tst.l D0
- bne ExeErr
-
-
- JSRABS UseHarryOSEmu
-
- move.l #10000,D0
- JSRABS LoadSmallFiles
-
- moveq.l #0,D0
- move.l #CACRF_CopyBack,D1
- JSRABS Degrade
-
- GO_SUPERVISOR
- SAVE_OSDATA $200000
-
- move.w #0,SR
-
- bsr InstallBoot
-
- ; **** boot stuff and patch
-
- JSRGEN FlushCachesHard
-
- jsr (A1)
-
- JSRGEN InGameExit
-
- InstallBoot:
- move.l prog(pc),A0
- bsr LoadExecutable
-
- STORE_REGS
- move.l #$4EAEFE44,D0
- move.l #$4E714E71,D1
-
- cmp.l ($44C,A1),D0
- bne.b .nop1
- move.l D1,($44C,A1)
- .nop1
- cmp.l ($4AC,A1),D0
- bne.b .nop2
- move.l D1,($4AC,A1)
- .nop2
-
- RESTORE_REGS
- rts
-
- MemErr:
- Mac_printf "** Not enough memory to run Fire And Ice CD32!"
- JMPABS CloseAll
-
- AgaErr:
- Mac_printf "** You need a A1200/A4000 to run Fire And Ice CD32!"
- JMPABS CloseAll
-
- ExeErr:
- lea exenotfound(pc),A1
- JSRABS Display
- move.l prog(pc),A1
- JSRABS Display
- NEWLINE
- JMPABS CloseAll
-
-
- trainer:
- dc.l 0
- ExtBase:
- dc.l 0
-
- exenotfound:
- dc.b "** Cannot find file ",0
-
- progname:
- dc.b "FirePAL",0
- progname_ntsc:
- dc.b "FireNTSC",0
- cnop 0,4
-
- ; loads an executable by calling OSEmu LoadSeg()
- ;
- ; < A0: name of the executable
- ; > A1: start address (do a JSR (a1) to start the program)
- ; > A0: pointers on arguments
- ; > D0: argument string length
- ;
- ; ** no checks are done there so be careful **
-
- LoadExecutable:
- movem.l A2-A6/D1-D7,-(A7)
- move.l A0,-(A7)
- MOVE.L $4.W,A6 ;OPEN DOSLIB FOR USE (THE EMU
- MOVEQ.L #0,D0 ;PROVIDES THE FUNCTIONS)
- LEA dosname(PC),A1
- JSRLIB OpenLibrary
- RELOC_MOVEL D0,dosbase
- MOVE.L D0,A6
- move.l (A7)+,A0
-
- MOVE.L A0,D1
- JSRLIB LoadSeg
- RELOC_MOVEL D0,loaderseg
-
- LSL.L #2,D0
- MOVE.L D0,A1
- ADDQ.L #4,A1
-
- lea progargs(pc),A0
- move.l A0,D0
- JSRGEN StrlenAsm ; arguments length
-
- JSRGEN FlushCachesHard
- movem.l (A7)+,A2-A6/D1-D7
- rts
-
- ; unloads previously loaded executable
-
- UnloadExecutable:
- STORE_REGS
- move.l dosbase(pc),A6
- move.l loaderseg(pc),D1
- JSRLIB UnLoadSeg
- RESTORE_REGS
- rts
-
- FileErr:
- Mac_printf "** Cannot find file ...."
- JMPABS CloseAll
-
- loaderseg:
- dc.l 0
- dosbase:
- dc.l 0
- prog:
- dc.l 0
-
- progargs:
- ; your arguments here (ex: dc.b "/f data1")
- dc.b 10,0 ; linefeed + null termination
- dosname:
- dc.b "dos.library",0
-
-